package com.example.strategy;

import com.example.entity.Coupon;
import com.example.entity.UserCoupon;
import com.example.util.BeanCopyPropertiesUtils;

import java.math.BigDecimal;

public interface Discount {
    /**
     * 判断当前价格是否满足优惠券使用限制
     * @param totalAmount 订单总价
     * @param coupon 优惠券信息
     * @return 是否可以使用优惠券
     */
    boolean canUse(BigDecimal totalAmount, UserCoupon coupon);

    /**
     * 计算折扣金额
     * @param totalAmount 总金额
     * @param coupon 优惠券信息
     * @return 折扣金额
     */
    BigDecimal calculateDiscount(BigDecimal totalAmount, UserCoupon coupon);

    /**
     * 根据优惠券规则返回规则描述信息
     * @return 规则描述信息
     */
    String getRule(UserCoupon coupon);

    default String getRule(Coupon coupon) {
        UserCoupon userCoupon = BeanCopyPropertiesUtils.copyBean(coupon, UserCoupon.class);
        return getRule(userCoupon);
    }


}